//
//  WBStatusListViewModel.swift
//  仿新浪微博
//
//  Created by 罗超 on 2017/8/17.
//  Copyright © 2017年 LuoChao. All rights reserved.
//

import Foundation

///微博数据列表视图模型
/*
 父类的选择
 - 如果类需要使用 KVC 或者字典转模型框架设置对象值，类就需要继承自 NSObject
 - 如果类只包装了一些代码逻辑（写了一些函数），可以不用任何父类，好处：更加轻量级
 - 提示：如果用 OC 写，一律都继承自 NSObject 即可
 
 使命：负责微博的数据处理
 1，字典转模型
 2，下拉/上拉刷新数据处理
 */

/// 上拉刷新最大尝试次数
fileprivate let maxPullupTryTimes = 3

class WBStatusListViewModel {
    
    ///微博模型懒加载
    lazy var statusList = [WBStatus]()
    ///上拉刷新错误次数
    fileprivate var pullupErrorTimes = 0
    
    /// 加载微博列表
    ///
    /// - Parameters:
    ///   - pullup: 是否上拉刷新标记
    /// - Parameter completion: 完成回调[网络请求是否成功，是否刷新表格]
    func loadStatus(pullup: Bool = false, completion: @escaping (_ isSuccess: Bool, _ shouldRefresh: Bool)->()) {
        
        // 判断是否上拉刷新，并检查刷新错误次数
        if pullup && pullupErrorTimes > maxPullupTryTimes {
            completion(true, false)
            return
        }
        
        // since_id 取出数组中第一条微博的 id
        let since_id = pullup ? 0 : (statusList.first?.id ?? 0)
        // max_id 上拉，取出最后一条微博 id
        let max_id = !pullup ? 0 :  (statusList.last?.id ?? 0)
        
        WBNetworkManager.shared.statusList(since_id: since_id, max_id: max_id) { (list, isSuccess) in
            //数组转模型
            guard let array = NSArray.yy_modelArray(with: WBStatus.self, json: list ?? []) as? [WBStatus] else {
                
                completion(isSuccess, false)
                return
            }
            // 拼接数据
            self.statusList = pullup ? self.statusList+array : array+self.statusList
            
            //判断数据，完成回调
            if pullup && array.count == 0 {
                self.pullupErrorTimes += 1
                completion(isSuccess, false)
            }else {
                completion(isSuccess, true)
            }
        }
        
    }
    
}
